// 给定一个包含大写字母和小写字母的字符串 s ，返回 通过这些字母构造成的 最长的回文串 。

// 在构造过程中，请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。
/**
 * @param {string} s
 * @return {number}
 */
 var longestPalindrome = function(s) {
     const statistics = new Map()
    for (var i = 0; i < s.length; i++) {
        statistics.set(s[i], (statistics.get(s[i]) ?? 0) + 1);
    }
    let EvenSum = 0
    statistics.forEach(key=>{
        if  (statistics[key]%2===0){
            EvenSum+=statistics[key]
          }else {
            EvenSum+=statistics[key]-1
          }
    })
    
    return EvenSum<s.length?EvenSum+1:EvenSum
};

const result =longestPalindrome("abccccdd")
console.log(result);
// 1、分析问题，建立数学模型
    // 回文串由若干对，以偶数个数，存在的元素，和一个以奇数个数存在的元素组成的字符串，
    // 要求求出最长回文串的长度，就是求出，所有以偶数个数存在的元素，有多少个，再加一个奇数个数存在的元素（如果有）
// 2、把任务分解成互相独立的子任务
    // 分别求出所有元素出现的次数，记录在一个对象
// 3、把子任务的解合并为此任务的解
    // 出现次数为偶数的，直接累加次数，为奇数的，减一后在累加